/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package koncowka;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

/**
 *
 * @author root
 */
public class Koncowka {
    
    private static List<Ap> listaAp;
    private static List<Regula> listaRegul;
    private static String interfejs;
    private static Map<String,Map<String,Regula>> mapaRegul;
    private static Boolean czyBlokowacAp;
    private static Boolean czyBlokowacKlienta;
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        listaAp= new ArrayList<Ap>();
        czyBlokowacAp = false;
        czyBlokowacKlienta = false;
        //daneTestowe();
        Skaner skaner = new Skaner();
        Interpreter interpreter = new Interpreter();
        Aktualizator aktualizator = new Aktualizator();
        skaner.start();
        interpreter.start();
        aktualizator.start();
        Scanner sc = new Scanner(System.in);
        String tl;
        System.out.println("Wpisz K, zeby zakonczyc program");
        tl=sc.next();
        while(!(tl.equals("K")|| tl.equals("k")))
        {
            tl=sc.next();
        }
        skaner.koniec();
        interpreter.koniec();
        aktualizator.koniec();
    }

    public static List<Ap> getListaAp() {
        return listaAp;
    }

    public static void setListaAp(List<Ap> listaAp) {
        Koncowka.listaAp = listaAp;
    }

    public static void setListaRegul(List<Regula> listaRegul) {
        Koncowka.listaRegul = listaRegul;
        uzupelnijMape(listaRegul);
    }

    public static List<Regula> getListaRegul() {
        return listaRegul;
    }

    public static String getInterfejs() {
        return interfejs;
    }

    public static void setInterfejs(String interfejs) {
        Koncowka.interfejs = interfejs;
    }

    public static Map<String, Map<String, Regula>> getMapaRegul() {
        return mapaRegul;
    }

    public static Boolean getCzyBlokowacAp() {
        return czyBlokowacAp;
    }

    public static Boolean getCzyBlokowacKlienta() {
        return czyBlokowacKlienta;
    }
    
    

    
    private static void uzupelnijMape(List<Regula> listaRegul) {
        // Dodac przepisywanie aktywnych regul ze starszej wersji mapy
        for (Regula regula : listaRegul) {
            if(mapaRegul==null)
                mapaRegul = new HashMap<String,Map<String, Regula>>();
            Map<String, Regula> mapa = mapaRegul.get(regula.getApMAC());
            if(mapa==null)
            {
                mapa = new HashMap<String, Regula>();
                mapaRegul.put(regula.getApMAC(),mapa);
            }
            if (mapa.get(regula.getKlientMAC())==null)
                mapa.put(regula.getKlientMAC(), regula);
        }
    }

    private static void daneTestowe() {
        mapaRegul = new HashMap<String,Map<String, Regula>>();
        
        Map<String, Regula> mapa = new HashMap<String,Regula>();
        Regula reg = new Regula("5C:B5:24:9B:3D:11", "C0:14:3D:D1:8D:23", true);
        mapa.put("C0:14:3D:D1:8D:23",reg );
        mapaRegul.put("5C:B5:24:9B:3D:11", mapa);
        reg.setBlokada(new BlokadaKlienta(reg.getApMAC(), reg.getKlientMAC()));
//        mapa.put("0E:06:09:7E:6A:7B", new Regula("FF:FF:FF:FF:FF:FF", "0E:06:09:7E:6A:7B", true));
//        mapaRegul.put("FF:FF:FF:FF:FF:FF", mapa);
        
        
        
    }
    
    
    
}
